home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / SYSUTIL1.D < prev    next >
Encoding:
Modula Definition  |  1989-09-20  |  4.1 KB  |  113 lines

  1. DEFINITION MODULE SysUtil1;
  2.  
  3. (*
  4.  * Modul mit Peeks, Pokes und Bit-Manipulationen für Megamax Modula-2
  5.  *
  6.  *   25.10.88 Christoph Grunwald: Peek-/Poke-Funktionen
  7.  *   07.12.88 Thomas Tempelmann:  Bit-Funktionen
  8.  *)
  9.  
  10. FROM SYSTEM IMPORT ADDRESS, BYTE, WORD, LONGWORD;
  11.  
  12.  
  13. (*
  14.  *  Poke-Funktionen
  15.  *  ---------------
  16.  *    zum Speichern von Werten in beliebige Speicherstellen.
  17.  *
  18.  *  Peek-Funktionen
  19.  *  ---------------
  20.  *    zum Auslesen von Werten aus beliebigen Speicherstellen.
  21.  *
  22.  *    Die Funktionen, die ein 'B', 'W', oder 'L' enthalten, speichern bzw.
  23.  *  lesen nur ein Byte, Word bzw. Longword, wobei bei den 'W'- und 'L'-
  24.  *  Funktionen die Quell-/Zieladresse nicht ungerade sein darf, da es sonst
  25.  *  zu einem "Adreßfehler" käme, die 'BPoke'-Funktionen verwenden nur das
  26.  *  untere Byte des CARDINAL-Arguments. Den übrigen Funktionen (mit dem
  27.  *  OPEN ARRAY-Parameter) kann jedes beliebige Datum übergeben werden - es
  28.  *  wird dann immer byteweise übertragen (so kann es zu keinem "Zugriff auf
  29.  *  ungerade Adresse", also einem "Adreßfehler", kommen).
  30.  *
  31.  *    Die 'Super'-Funktionen erlauben den Zugriff auch auf Speicherbereiche,
  32.  *  die nur im Supervisormodus erreichbar sind (sonst gäb's "Bus-Fehler"),
  33.  *  z.B. die Hardwareregister (oberhalb $FF8000) oder Systemvariablen
  34.  *  (ab $400).
  35.  *
  36.  *    Die 'Fast'-Funktionen (nur bei 'Poke') waren beim altem Compiler
  37.  *  ohne REF-Parameter nützlich, nun können auch die normalen Funktionen
  38.  *  (ohne 'Fast') ebenso effizient genutzt werden.
  39.  *)
  40.  
  41.   (* Normale Poke *)
  42.  
  43. PROCEDURE Poke  ( addr: ADDRESS; REF data: ARRAY OF BYTE );
  44. PROCEDURE BPoke ( addr: ADDRESS; data: WORD );
  45. PROCEDURE WPoke ( addr: ADDRESS; data: WORD );
  46. PROCEDURE LPoke ( addr: ADDRESS; data: LONGWORD );
  47.  
  48.   (* Supervisor Poke *)
  49.  
  50. PROCEDURE SuperPoke  ( addr: ADDRESS; REF data: ARRAY OF BYTE );
  51. PROCEDURE SuperBPoke ( addr: ADDRESS; data: WORD );
  52. PROCEDURE SuperWPoke ( addr: ADDRESS; data: WORD );
  53. PROCEDURE SuperLPoke ( addr: ADDRESS; data: LONGWORD );
  54.  
  55.   (* Normale Peek *)
  56.  
  57. PROCEDURE Peek  ( addr: ADDRESS; VAR data: ARRAY OF BYTE );
  58. PROCEDURE BPeek ( addr: ADDRESS ): CARDINAL;
  59. PROCEDURE WPeek ( addr: ADDRESS ): CARDINAL;
  60. PROCEDURE LPeek ( addr: ADDRESS ): LONGCARD;
  61.  
  62.   (* Supervisor Peek *)
  63.  
  64. PROCEDURE SuperPeek  ( addr: ADDRESS; VAR data: ARRAY OF BYTE );
  65. PROCEDURE SuperBPeek ( addr: ADDRESS ): CARDINAL;
  66. PROCEDURE SuperWPeek ( addr: ADDRESS ): CARDINAL;
  67. PROCEDURE SuperLPeek ( addr: ADDRESS ): LONGCARD;
  68.  
  69. (*
  70.  * Bit-Funktionen
  71.  * --------------
  72.  *
  73.  *    Die 'Super'-Funktionen erlauben den Zugriff auch auf Speicherbereiche,
  74.  *  die nur im Supervisormodus erreichbar sind (sonst gäb's "Bus-Fehler"),
  75.  *  z.B. die Hardwareregister (oberhalb $FF8000) oder Systemvariablen
  76.  *  (ab $400).
  77.  *
  78.  *)
  79.  
  80. TYPE BitRange = [0..7];
  81.  
  82. PROCEDURE Bit      ( addr: ADDRESS; no: BitRange ): BOOLEAN;
  83. PROCEDURE SuperBit ( addr: ADDRESS; no: BitRange ): BOOLEAN;
  84.   (* Ermittelt Status des Bits 'no' im Byte auf Adr. 'addr' *)
  85.  
  86. PROCEDURE BitSet      ( addr: ADDRESS; no: BitRange );
  87. PROCEDURE SuperBitSet ( addr: ADDRESS; no: BitRange );
  88.   (* Setzt Bit 'no' im Byte auf Adr. 'addr' *)
  89.  
  90. PROCEDURE BitClr      ( addr: ADDRESS; no: BitRange );
  91. PROCEDURE SuperBitClr ( addr: ADDRESS; no: BitRange );
  92.   (* Löscht Bit 'no' im Byte auf Adr. 'addr' *)
  93.  
  94. PROCEDURE BitChg      ( addr: ADDRESS; no: BitRange );
  95. PROCEDURE SuperBitChg ( addr: ADDRESS; no: BitRange );
  96.   (* Invertiert Bit 'no' im Byte auf Adr. 'addr' *)
  97.  
  98. PROCEDURE ByteToBitset ( b: BYTE ): BITSET;
  99.   (* Wandelt ein Byte (8 Bits) in ein BITSET (Elemente 8-15 werden gelöscht) *)
  100.  
  101. PROCEDURE BitsetToByte ( bs: BITSET ): BYTE;
  102.   (* Wandelt ein BITSET in ein Byte (8 Bits) (Elemente 8-15 werden ignoriert) *)
  103.  
  104. (*
  105.  * Folgende zwei Funktionen existieren nur noch zur Kompatibilität mit
  106.  * alten Programmen und brauchen in Zukunft nicht mehr benutzt werden
  107.  * (die Routinen ohne 'Fast' sind durch den REF-Parameter ebenso schnell).
  108.  *)
  109. PROCEDURE FastPoke ( addr: ADDRESS; VAR data: ARRAY OF BYTE );
  110. PROCEDURE FastSuperPoke ( addr: ADDRESS; VAR data: ARRAY OF BYTE );
  111.  
  112. END SysUtil1.
  113.